Java8包含了全新的时间日期API,这些功能都放在了java.time包下。这套全新的时间日期API是不可变且线程安全的(This class is immutable and thread-safe)。
1 本地时间:LocalDate、LocalTime、LocalDateTime
localDate、LocalTime、LocalDateTime类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或者时间,并不包含当前的时间信息。也不包含与时区相关的信息。
localDate、LocalTime、LocalDateTime三个的使用的方式一模一样。
以localDateTime为例:
1 | // 获取当前日期时间 |
输出结果:
2018-05-13T16:56:04.346
2017-11-22T15:23:55
2020-05-13T16:56:04.346
2016-05-13T16:56:04.346
2 时间戳:Instant
Instant:时间戳,以1970年1月1日00:00:00 开始,到某个时间的毫秒值。
1 | // 默认获取UTC时区(UTC:世界统一时间) |
输出结果:
2018-05-13T11:54:33.717Z
1526212473717
2018-05-13T19:54:33.717+08:00
1970-01-01T00:01:00Z
3 计算间隔:Duration、Period
Duration:计算两个“时间”之间的间隔。
Period:计算两个“日期”之间的间隔。
计算两个“时间”之间的间隔。
1 | Instant instant1 = Instant.now(); |
计算两个“日期”之间的间隔。
1 | LocalDate date1 = LocalDate.of(2017, 1, 1); |
1
4
12相差1年4个月12天。
5 时间校正器:TemporalAdjuster
TemporalAdjuster:时间校正器,有时我们可能会需要获取例如:将日期调整到“下个周如”等操作。
TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现。
例如:
1 | LocalDateTime dateTime = LocalDateTime.now(); |
6 时间日期格式化:dateTimeFormatter
1 | // 使用ISO标准日期格式 |
7 时区的处理:ZonedDate、ZonedTime、ZonedDateTime
以
LocalDateTime为例。
使用LocalDateTime的static LocalDateTime now(ZoneId zone)方法来指定时区:
1 | LocalDateTime dateTime = LocalDateTime.now(ZoneId.of("America/Los_Angeles")); |
结果:2018-05-13T06:24:47.349。显示的是美国洛杉矶时区的时间。
使用LocalDateTime的ZonedDateTime atZone(ZoneId zone)方法转换成ZonedDateTime(带时区的时间日期对象):
1 | LocalDateTime dateTime2 = LocalDateTime.now(); |
结果:2018-05-13T06:24:47.446-07:00[America/Los_Angeles]
ZonedDateTime是带时区的时间日期。